<?php

/**
 * Contrôleur des utilisateurs
 */
class user_controller extends Component
{

    // Attributs
    const byPage = 10;
    const page_identifier = 'page-';
    public $_pageTotal;

    
	// Attributs
    private $_userClass;

    /**
     * Constructeur : Récupération des données des utilisateurs
     *
     * @see CLASS_USER
     */
    public function __construct()
    {
    	$this->_userClass = Base::Load(CLASS_USER);
    }

    /**
     * Données à envoyer à la vue par défaut
     */
    public function defaut()
    {
        if (isset($_GET['param'][0])) {
            if (preg_match("/".self::page_identifier."/i", $_GET['param'][0])) {
                $p = explode(self::page_identifier, $_GET['param'][0]);
                $this->getAll($p[1]);
            } else {
                $tmp = explode('-',$_GET['param'][0]);
                $this->getOne($tmp[0]);
            }
        } else {
            $this->getAll();
        }
    }




    /**
     * Sélection d'un chasseur
     *
     * @param: unsigned $id L'id d'un chasseur
     */
    private function getOne($id)
    {
        $data = Base::Load(CLASS_USER)->get($id);

        $this->addBreadCrumb($data['nom'].' '.$data['prenom']);
        $data['note'] = Base::Load(CLASS_USER)->getNote($data['_id']);
        $data['noteNB']  = Base::Load(CLASS_USER)->getNoteNB($data['_id']);
        $this->_view->assign('data', $data);
        $this->_view->addBlock('content', 'user.tpl');
    }

    /**
     * Récupération de tous les chasseurs
     *
     * @param unsigned $page L'endroit du tableau à visualiser (pagination)
     */
    private function getAll($page = 1)
    {
        $this->_view->addBlock('autoCompleteVille','formAutocomplete.tpl');

        $dataTmp = Base::Load(CLASS_USER)->getAll();
        $this->_pageTotal = ceil(count($dataTmp) / self::byPage) + 1;
        $start = self::byPage * $page - self::byPage;
        $pageStart = $page - 5;

        if ($pageStart < 1) {
            $pageStart = 1;
        }

        foreach ($dataTmp as $i => $d) {
            if ($i >= $start) {
                if ($i < $start + self::byPage) {
                    $d['ville'] = Base::Load(CLASS_LOC)->getVille($d['ville']);
                    $d['note']  = Base::Load(CLASS_USER)->getNote($d['_id']);
                    $data[$i] = $d;
                } else {
                    break;
                }
            }
        }

        $this->_view->assign('pageTotal', $this->_pageTotal);
        $this->_view->assign('page', $page);
        $this->_view->assign('pageStart', $pageStart);
        $this->_view->assign('pageStop', $pageStart + self::byPage - 1);
        $this->_view->assign('data', $data);

        if (isset($_GET['ajax']) && $_GET['ajax']) {
            $this->_view->assign('ajax', true);
            Base::Load(CLASS_BASE)->setLayout('vide.tpl');
            $this->_view->addBlock('data', 'list.tpl');
        } else {
            $this->_view->addBlock('content', 'list.tpl');
        }
    }


    /**
     * Connexion d'un utilisateur
     */
    public function connect()
    {
        $this->_view->addBlock('data', 'connect.tpl');
    }

    /**
     * Ajout d'un membre
     */
    public function register()
    {
        $this->_view->assign('regions', Base::Load(CLASS_LOC)->getRegion());
        $this->_view->addBlock('data', 'register.tpl');
    }


    /**
     * Déconnexion d'un membre
     */
    public function disconnect()
    {
    	if ($this->_userClass->disconnect()) {
    		header('Location: ' . SYS_FOLDER);
    	}
    }

    /**
     * Formulaire de connexion
     *
     * @param array $data Les données du formulaire
     */
    public function POST_connect(array $data)
    {
    	if ($this->_userClass->connect($data['user_email'], $data['user_password'])) {
    		header('Location: ' . BASE_URL . 'gestion/');
    	} else {
    		header('Location: ' . BASE_URL . 'error-login');
    	}
    }

    /**
     * Formulaire d'ajout/de modification de membres
     *
     * @param array $data Les données du formulaire
     */
    public function POST_MemberData(array $data)
    {
    	if (!isset($data['id']) || empty($data['id'])) { // Création
            $dataLoc = $this->_userClass->getGPS($data['ville'], $data['adress']);
            $data['lat'] = $dataLoc->lat;
            $data['lng'] = $dataLoc->lng;

    		if ($this->_userClass->save($data)) {
    			header('Location: ' . BASE_URL);
    		} else {
    		    header('Location: ' . BASE_URL . 'error-register');
    		}
    	} else { // Mise à jour
            $dUser = $this->_userClass->get($data['id']);

            unset($dUser['_id']);

            foreach($dUser as $key => $d){
                if(isset($data[$key]))
                    $dUser[$key] = $data[$key];
            }
            
    		if ($this->_userClass->update($dUser, $data['id'])) {
    			header('Location: ' . HTTP_HOST_REQUEST);
    		}
    	}
    	exit;
    }

    /**
     * Accès aux informations personnelles
     */
    public function myProfil()
    {
    	if ($this->_userClass->isConnect()) {
    	    $user = $this->_userClass->get($_SESSION['user']['uid']);
    	    $this->_view->assign('regions', Base::Load(CLASS_LOC)->getRegion());
    	    $this->_view->assign('depts', Base::Load(CLASS_LOC)->getDepartementByRegionID($user['region']));
    	    $this->_view->assign('villes', Base::Load(CLASS_LOC)->getVilleByDepartementID($user['departement']));
    	    $this->_view->assign('user', $user);
    		$this->_view->addBlock('data', 'profil.tpl');
    	}
    }
    
    /**
     * Affichage d'un message d'erreur si le formulaire d'isncription a été mal rempli
     */
    public function AfficherErreurInscription()
    {
        $this->_view->addBlock('erreur', 'erreur_insc.tpl', 'controller/user/view/');
    }

    /**
     * Affichage d'un message d'erreur si le formulaire de connexion a été mal rempli
     */
    public function AfficherErreurConnexion()
    {
        $this->_view->addBlock('erreur', 'erreur_conn.tpl', 'controller/user/view/');
    }

    public function getAutoComplete(){
        $this->setContentType('text/plain');
        $query = $_GET['query'];
        $queryType = array('user');
        $data = Base::Load(CLASS_SEARCH)->MySearch($query, $queryType, true);
        exit($data);
    }
    
    public function POST_PopinAccueil(array $data)
    {
        setcookie('villeID', $data['ville'], (time() + 3600 * 24 * 365));
        $ville = Base::Load(CLASS_LOC)->getVille($data['ville']);
        $redirect = 'ville/'.$ville[0].'-'.str_replace(' ','-',$ville[2]);
        header('location: '.$redirect);
        exit();
    }
}


/* -- Fin du fichier -- */